﻿using System;
using System.Collections.Generic;
using System.Linq;
using Vk.Methods.Common;
using Vk.Methods.Photos;

namespace Vk.Methods.Market
{
    /// <summary>
    ///     Объект item, описывающий товар
    /// </summary>
    public class MarketItem : BaseEntity
    {
        /// <summary>
        ///     Статус доступности товара.
        /// </summary>
        public MarketItemAvailability? Availability { get; set; }

        /// <summary>
        ///     Возможность комментировать товар для текущего пользователя (true — есть, false — нет).
        /// </summary>
        public bool? CanComment { get; set; }

        /// <summary>
        ///     Возможность сделать репост товара для текущего пользователя (true — есть, false — нет).
        /// </summary>
        public bool? CanRepost { get; set; }

        /// <summary>
        ///     Категория товара.
        /// </summary>
        public MarketCategory Category { get; set; }

        /// <summary>
        ///     Дата создания товар.
        /// </summary>
        public DateTime? Date { get; set; }

        /// <summary>
        ///     Текст описания товара.
        /// </summary>
        public string Description { get; set; }

        /// <summary>
        ///     Информация об отметках «Мне нравится».
        /// </summary>
        public LikesInfo Likes { get; set; }

        /// <summary>
        ///     Изображения товара.
        /// </summary>
        public List<Photo> Photos { get; set; }

        /// <summary>
        ///     Цена.
        /// </summary>
        public ProductPrice Price { get; set; }

        /// <summary>
        ///     URL изображения-обложки товара.
        /// </summary>
        public string ThumbPhoto { get; set; }

        /// <summary>
        ///     Название товара
        /// </summary>
        public string Title { get; set; }

        public MarketItem(ApiNode node)
        {
            Id = node.Int("id");
            OwnerId = node.Int("owner_id");
            Title = node.String("title");
            Description = node.String("description");
            Price = node.Object("price", x => new ProductPrice(x));
            Category = node.Object("category", x => new MarketCategory(x));
            ThumbPhoto = node.String("thumb_photo");
            Date = node.DateTime("date");
            Availability = (MarketItemAvailability?) node.Int("availabilty");

            //Extended fields
            Photos = node.SelectNode("photos")?.ChildNodes.Select(x => new Photo(x)).ToList();
            CanComment = node.Bool("can_comment");
            CanRepost = node.Bool("can_repost");
            Likes = node.Object("likes", apiNode => new LikesInfo(apiNode));
        }
    }
}